#include "clientHead.h"
void error_quit(char *msg){
    perror(msg);
    exit(-2);
}
void get_salt(char *salt, const char *passwd){
    int i, j;
    // 取出salt，i记录密码字符下标，j记录$出现次数
    // $y$，此版本盐值在第三和第四个$之间
    for(i = 0, j = 0; passwd[i] && j != 4; ++i){
        if(passwd[i] == '$'){
            ++j;
        }
    }
    strncpy(salt, passwd, i);
}
/* Usage:./client 127.0.0.1 12345 username */
bool login_check(const char *username){
    struct spwd *sp;
    char *passwd;
    char salt[512] = {0};
    // 输入用户名密码
    passwd = getpass("请输入密码：");

    // 得到用户名及密码，命令行参数第四个为用户名
    if((sp = getspnam(username)) == NULL){
        error_quit("获取用户名和密码");
    }
    // 得到salt，用得到的密码做参数
    get_salt(salt, sp->sp_pwdp);
    // 进行密码验证
    if(strcmp(sp->sp_pwdp, crypt(passwd, salt)) == 0){
        printf("验证通过！\n");
        return true;
    }
    else{
        printf("验证失败！\n");
        return false;
    }
}

